在自定义手册页中包含来自外部文件的变量或 shell 命令?

Include variables from external files or shell commands in custom man page?

我正在编写一些自定义 man 页面,我想包括可能经常更改的内容,例如 man 页面的编写日期。

例如,我想在 git repo 中更新 man 页面的日期必须手工完成。

是否有可能 #include 或调用 *roff 文件中的 shell 变量,或者 markdown 文件然后使用pandoc 到“编译man 页面?

我知道这是一个奇怪的问题,但我没有遇到过类似的问题。

请注意,这不同于简单地在 $MANPATH 中包含一个手册页以供 man 调用。

I.E.,我想使用类似的东西:

.TH foo 10 "$(git log -n1 | grep Date | tail -c 31)" "$(git branch | grep "*")"

而不是每次都必须手动更改日期和 branch/head 名称。无论这是在 markdown 中并提供给 pandoc 或其他东西,还是仅在 roff 文件本身中,我都可以接受。

我从你的示例行中看到你正在使用 Git - 我相信你可以使用 'pre-commit' git hook (基本上是一个在处理你的提交之前运行的脚本)在每次提交时更新联机帮助页的内容(并暂存更改)。

例如,您可以将以下命令放入您的 .git/hooks/pre-commit 文件中,以便在您提交时更新联机帮助页的内容:

sed -i "" "s/^.TH foo 1 \".*/.TH foo 1 \"$(date)\"/" path/to/manpage.roff git add path/to/manpage.roff

请注意,该路径是相对于 git 存储库根目录的。

考虑使用像 asciidoc 这样的文档生成器语言编写 man 页面的内容,它具有大部分所需的功能。 asciidoc 格式可以包含外部输入文件,并根据需要即时 更改各种内容。

要包含 shell 脚本,请参阅 Asciidoc 中文字内的替换 .

或者可以使用 shell 脚本生成配置文件,然后包含该文件。

如果这个答案目前有点模糊,请提前致歉,因为它更像是一个软件推荐(没有任何实际代码)而不是一个真正的答案。